// import com.alibaba.druid.sql.ast.*;
// import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../SQLStatementImpl.h"

class SQLReplaceStatement : virtual public SQLStatementImpl
{
public:
  BOOL_ptr lowPriority;
  BOOL_ptr delayed;

  SQLExprTableSource_ptr tableSource;
  SQLExpr_list_ptr columns;
  SQLInsertStatement_ValuesClause_list_ptr valuesList;
  SQLQueryExpr_ptr query;

  SQLCommentHint_list_ptr hints;
  SQLAssignItem_list_ptr partitions;

  SQLReplaceStatement();
  SHAREDOBJECT(SQLReplaceStatement);

  SQLName_ptr getTableName();

  void setTableName(SQLName_ptr tableName);

  SQLExprTableSource_ptr getTableSource();

  void setTableSource(SQLExprTableSource_ptr tableSource);

  SQLExpr_list_ptr getColumns();

  void addColumn(SQLExpr_ptr column);

  BOOL_ptr isLowPriority();

  void setLowPriority(BOOL_ptr lowPriority);

  BOOL_ptr isDelayed();

  void setDelayed(BOOL_ptr delayed);

  SQLQueryExpr_ptr getQuery();

  void setQuery(SQLQueryExpr_ptr query);

  SQLInsertStatement_ValuesClause_list_ptr getValuesList();

  // @Override
  SQLObject_ptr clone();

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  int getHintsSize();

  SQLCommentHint_list_ptr getHints();

  void setHints(SQLCommentHint_list_ptr hints);

  void addPartition(SQLAssignItem_ptr partition);

  SQLAssignItem_list_ptr getPartitions();
};
